1. Technical Field
This invention generally relates to data processing, and more specifically relates to communication between logical partitions in a computer system.
2. Background Art
Since the dawn of the computer age, computer systems have evolved into extremely sophisticated devices that may be found in many different settings. Computer systems typically include a combination of hardware (e.g., semiconductors, circuit boards, etc.) and software (e.g., computer programs). As advances in semiconductor processing and computer architecture push the performance of the computer hardware higher, more sophisticated computer software has evolved to take advantage of the higher performance of the hardware, resulting in computer systems today that are much more powerful than just a few years ago.
The combination of hardware and software on a particular computer system defines a computing environment. Different hardware platforms and different operating systems thus provide different computing environments. In recent years, engineers have recognized that it is possible to provide different computing environments on the same physical computer system by logically partitioning the computer system resources to different computing environments. The iSeries computer system developed by IBM is an example of a computer system that supports logical partitioning. If logical partitioning on an iSeries computer system is desired, partition manager code (referred to as a “hypervisor” in iSeries terminology) is installed that allows defining different computing environments on the same platform. Once the partition manager is installed, logical partitions may be created that define different computing environments. The partition manager manages the logical partitions to assure they can share needed resources in the computer system while maintaining the separate computing environments defined by the logical partitions.
A computer system that includes multiple logical partitions typically shares resources between the logical partitions. For example, a computer system with two logical partitions and a single CPU could be defined that allocates 50% of the CPU to each partition, that allocates 33% of the memory to the first partition and 67% of the memory to the second partition, and that allocates two different I/O slots to the two logical partitions, one per partition. Once logical partitions are defined and shared resources are allocated to the logical partitions, each logical partition acts as a separate computer system. Thus, in the example above that has a single computer system with two logical partitions, the two logical partitions will appear for all practical purposes to be two separate and distinct computer systems.
Logically partitioned computer systems have recognized that input/output (I/O) devices may be shared between logical partitions. This led to the concept of a virtual I/O device. For example, let's assume a computer system with two logical partitions includes a single network adapter card. The first partition could be assigned a first virtual network connection that uses the physical network adapter card. The second partition could then be assigned a second virtual network connection that also uses the same physical network adapter card. Because multiple logical partitions now have simultaneous access to a physical device, the logical partitions must have the capability of moving data between the partitions, because a read from the physical network adapter card by one logical partition may read data that is intended for the other logical partition. In addition, one or more virtual connections may be defined that allow direct communication between logical partitions.
To move data between logical partitions, there must be some memory management mechanism that translates the address in one partition's memory space to a corresponding physical address in memory that is accessible by a different partition. This address translation has been performed in prior art IBM iSeries computer systems using translation control entities, or TCEs, which provide translation of I/O addresses to physical real addresses, and which provide access control characteristics for the physical storage. A partition manager allocates large, fixed, contiguous blocks of protected memory for the TCEs, which are used to translate an address in a logical partition's memory space to the corresponding physical address in memory. These large blocks of contiguous memory are allocated before the memory manager is running, and are allocated in protected memory accessible only by the partition manager. As the number of virtual connections increases, the number of TCEs correspondingly increases, resulting in memory capacity problems caused by the prior art method of allocating TCEs. Without a way to improve how TCEs are allocated in a logically partitioned computer system, the computer industry will continue to suffer from inefficient mechanisms and methods for performing address translation in logically partitioned computer systems.